#pragma once

#include "product.h"

class Builder 
{
protected:
  ProductPtr product_;
public:
  Builder();
  ~Builder() = default;
  virtual void buildPartA() = 0;
  virtual void buildPartB() = 0;
  ProductPtr getProduct();
};

using BuilderPtr = std::shared_ptr<Builder>;

Builder::Builder() {
  product_ = std::make_shared<Product>();
}

ProductPtr Builder::getProduct() {
  return product_;
}
